De la documentación :
El operador de desplazamiento a la derecha (>>) desplaza el primer operando el número especificado de bits a la derecha. Los bits en exceso desplazados hacia la derecha se descartan. Las copias del bit más a la izquierda se desplazan desde la izquierda. Dado que el nuevo bit más a la izquierda tiene el mismo valor que el bit anterior más a la izquierda, el bit de signo (el bit más a la izquierda) no cambia. De ahí el nombre de "propagación de signos".
Por lo que entiendo, dado que 100 es 0b1100100 , cambiarlo 100 veces a la derecha debería producir 0b0 . Sin embargo, cuando ejecuto 100 >> 100 en Javascript (usando Chrome), devuelve 6. ¿Por qué es este el caso? Supongo que tiene algo que ver con la representación interna de números de JS, pero me gustaría saberlo más claramente.
Editar: la respuesta sigue siendo 6, incluso cuando se usa el operador >>> sin firmar. Firmar/sin firmar no parece importar.
Documentación de operación sin firmar:
El operador de desplazamiento a la derecha sin signo (>>>) (desplazamiento a la derecha de relleno cero) desplaza el primer operando el número especificado de bits a la derecha. Los bits en exceso desplazados hacia la derecha se descartan. Los bits cero se desplazan desde la izquierda. El bit de signo se convierte en 0, por lo que el resultado siempre es no negativo. A diferencia de los otros operadores bit a bit, el desplazamiento a la derecha de relleno cero devuelve un entero de 32 bits sin signo.
El valor a la derecha se toma mod 32. (es decir, solo se usan los últimos cinco bits). Si calcula 100>>32 , obtiene 100 , que es lo mismo que obtiene cuando calcula 100>>0 . Después de eso, 100>>33 es 50 y el ciclo se repite.